home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / comm / mail / AirMail.lha / AirMail / AM_EditorScript.lha / editor.rexx < prev   
OS/2 REXX Batch file  |  1995-06-07  |  7KB  |  291 lines

  1. /* editor.rexx ... script for AirMail to do external editor */
  2. /*                 cleanly...                               */
  3.  
  4. /* By Rick Taylor (charlet@hubcap.clemson.edu)              */
  5. /* Last update 6-7-95                                       */
  6.  
  7. /* See documentation for more details - although this       */
  8. /* script _does_ contain many comments ... :)               */
  9.  
  10. /* ... minor fixes to handle the latest Airmail beta        */
  11. /* ... attachments should now work                          */
  12. /* ... now checks for "SENT" mail - duh                     */
  13. /* ... Make blank localfiule while editing                  */
  14.  
  15.  
  16. /* Built from modhdr (on Aminet) on June 1, 1995            */
  17.  
  18. /* Environment variables:                                   */
  19. /* AIREDITOR = pathname of your editor                      */
  20. /* AIRPAGER = pathname of your pager                        */
  21.  
  22. /* Initialize */
  23.  
  24. call addlib("rexxreqtools.library",0,-30,0)
  25. options results
  26. lf = '0a'x
  27. cr = '0d'x
  28. colon='3a'x
  29. semicol='3b'x
  30. qmark='22'x
  31. fonttag=""
  32. aflags=""
  33. address command
  34.  
  35. /* Intercept the filename */
  36.  
  37. localfile = ARG(1)
  38.  
  39. /* Get file comment */
  40.  
  41. localfilec = readcomment(localfile)
  42.  
  43. /* Create filenames ... */
  44.  
  45. tmpstem = ".atmp"
  46. cmdstem = ".acmd"
  47. hdrstem = ".ahdr"
  48. suffstem = "T:"
  49.  
  50. tmpfile = "T:0.atmp"
  51. cmdfile = "T:0.acmd"
  52. hdrfile = "T:0.ahdr"
  53.  
  54. flcounter = 0
  55.  
  56. do while (exists(tmpfile)|exists(cmdfile)|exists(hdrfile)) = 1
  57.    flcounter = flcounter + 1
  58.    tmpfile = suffstem||strip(flcounter)||tmpstem
  59.    cmdfile = suffstem||strip(flcounter)||cmdstem
  60.    hdrfile = suffstem||strip(flcounter)||hdrstem
  61.    end
  62.  
  63. 'echo >'tmpfile
  64. 'echo >'cmdfile
  65. 'echo >'hdrfile
  66.  
  67. /* Signature file?  Sheesh ... */
  68.  
  69. checkforsig=upper(right(localfile,12))
  70.  
  71. if checkforsig="SIGNATURE.AM" then do
  72.      if ~exists(localfile) then do
  73.          'echo >'localfile
  74.           end
  75.      call open .dae,cmdfile,write
  76.      call writeln .dae,envar('AIREDITOR') localfile
  77.      call close .dae
  78.      'execute 'cmdfile
  79.      dummy = cleanup('OK')
  80.      exit
  81.      end
  82.  
  83. /* Open file */
  84.  
  85.      dummy = open(mf,localfile,read)
  86.  
  87. /* Read headers */
  88.  
  89.      mailtype = readln(mf)
  90.      mto = readln(mf)
  91.      replyto = readln(mf)
  92.      date = readln(mf)
  93.      subject = readln(mf)
  94.      mcc = readln(mf)
  95.      mbcc = readln(mf)
  96.      blankline = readln(mf)
  97.  
  98. if mcc = "" then mcc = "<None>"
  99.  
  100. /* Create file with just the message */
  101.  
  102.                   call open tf,tmpfile,write
  103.       do until eof(mf)=1
  104.                   call writeln tf, readln(mf)
  105.       end
  106.     call close mf
  107.     call close tf
  108.  
  109. /* Here's where we part ways if it's not a file we need to edit.... */
  110.  
  111. if index(localfilec,"OLD") > 0 then mailtype="QUEUED MAIL"
  112. if index(localfilec,"SENT") > 0 then mailtype="SENT MAIL"
  113.  
  114. if mailtype ~= "AIRMAIL" then do
  115.      call open .dae,cmdfile,write
  116.      call writeln .dae,envar('AIRPAGER') localfile
  117.      call close .dae
  118.      'execute 'cmdfile
  119.      dummy = cleanup('OK')
  120.      exit
  121.      end
  122.  
  123. /* Get rid of the localfile ... we'll assemble it later */
  124.  
  125. 'echo >'localfile
  126.  
  127. /* Let's ask the user about the headers ...          */
  128.  
  129. whoto = mto
  130. msub = subject
  131.  
  132. if strip(mto)="" then do
  133.      whoto = getval(mto,"     Who to mail this to? (user@host)     ")
  134.      end
  135.  
  136. if (strip(subject)="")|(subject="ENTER SUBJECT HERE") then do
  137.      msub = getval(subject,"     Enter a subject for this mail:     ")
  138.      end
  139.  
  140. /* Edit the temporary (headerless horseman) file */
  141.  
  142. call open .dae,cmdfile,write
  143. call writeln .dae,envar('AIREDITOR') tmpfile
  144. call close .dae
  145.  
  146. 'execute 'cmdfile
  147.  
  148. /* Change header options */
  149.  
  150. hdflag = -1
  151.  
  152.   do until hdflag = 0
  153.  
  154.        hdmsg = "To     : "||whoto||lf||"Subject: "||msub||lf||"Attacht: "mcc||lf||"Date   : "||date
  155.        hdbuttons = "_To|_Subject|_Attachments|A_bort Mail|_Queue Mail!"
  156.  
  157.     hdflag = rtezrequest(hdmsg,hdbuttons,"Select an option...","")
  158.  
  159.   select 
  160.  
  161.       when hdflag = 1 then do
  162.          mto = whoto
  163.          mtxt = "     Who to mail this to? (user@host)     "
  164.          whoto = getval(mto,mtxt)
  165.          end
  166.  
  167.       when hdflag = 2 then do
  168.          subject = msub
  169.          msub = getval(subject,"     Enter a subject for this mail:     ") 
  170.          end
  171.  
  172.       when hdflag = 3 then do
  173.          mtxt = "What file to attach to this mail?"
  174.          defpath="RAM:"
  175.          mcc = getfname(mtxt,defpath)
  176.          if mcc = "<None>" then mcc = "ENTER ATTACHMENT HERE"
  177.          end
  178.  
  179.       when hdflag = 4 then do
  180.          dummy = cleanup('ABORT')
  181.          exit
  182.          end
  183.       otherwise
  184.   end
  185. end
  186.  
  187. /* Now that we've edited this file we should put together a message with */
  188. /* headers */
  189.  
  190. call open hdr,hdrfile,write
  191.  
  192. /* Write headers */
  193.  
  194. /* Note:  "mbcc" is really the X-Mailer header for purposes of */
  195. /*        Airmail.  Also, "mcc" is really the attachment       */
  196. /*        header ...                                           */
  197.  
  198. call writeln hdr,mailtype
  199. call writeln hdr,whoto
  200. call writeln hdr,replyto
  201. call writeln hdr,date 
  202. call writeln hdr,msub
  203. call writeln hdr,mcc
  204. call writeln hdr,mbcc
  205. call writeln hdr,""
  206.  
  207. call close hdr
  208.  
  209. /* Recreate localfile */
  210.  
  211. 'join 'hdrfile' 'tmpfile' AS 'localfile
  212.  
  213. /* Write the file comment */
  214.  
  215. call writecomment localfile,'QUEUED OLD'
  216.  
  217. /* Return control to the caller ... */
  218.  
  219. dummy = cleanup('OK')
  220. exit
  221.  
  222. /* Cleanup function ... */
  223.  
  224. cleanup:
  225.      arg cleanuptype
  226.  
  227. if cleanuptype="ABORT" then do
  228.    'delete 'localfile' QUIET'
  229.    end
  230.  
  231. 'delete 'tmpfile' QUIET'
  232. 'delete 'cmdfile' QUIET'
  233. 'delete 'hdrfile' QUIET'
  234. return cleanuptype
  235.  
  236. /* Useful subprograms follow ... */
  237.  
  238. getval: procedure
  239.      parse arg defsub,msg
  240.      mailsub = rtgetstring(defsub,msg,"ModHdr/AM by Rick Taylor","Ok","")
  241.      if mailsub = "" then mailsub = defsub
  242.      if mailsub = "" then mailsub = "<None>"
  243.      return mailsub
  244.      
  245. diagnostic: procedure
  246.      parse arg showit
  247.      msg = "Value = "||showit
  248.      cf=rtezrequest(msg,"OK","Diagnostic","")
  249.      return cf
  250.           
  251. envar: procedure
  252.      arg evname
  253.      epath = "ENV:"||evname
  254.      evalue = ""
  255.      if exists(epath) then do
  256.           call open .envar,epath,read
  257.           evalue = readln(.envar)
  258.           call close .envar
  259.           end
  260.      return evalue
  261.  
  262. getfname: procedure
  263.      parse arg msg,defdir
  264.      filename=""
  265.      fonttag = ""
  266.      parse arg dummy
  267.      filename = rtfilerequest(defdir, , msg , , fonttag "rtfi_buffer = true")
  268.      return filename
  269.  
  270. readcomment: procedure
  271.      arg flname
  272.      flcomment = ""
  273.      address command
  274.      if exists('ENV:DRMCOMMENT') then do
  275.         'delete ENV:DRMCOMMENT QUIET'  
  276.         end
  277.      if exists(flname) then do
  278.         'list 'flname' LFORMAT=%C >ENV:DRMCOMMENT'
  279.         flcomment = envar('DRMCOMMENT')
  280.         end
  281.      return flcomment
  282.  
  283. writecomment: procedure
  284.     parse arg flname,flcomment
  285.     qmark='22'x
  286.     qcomment=qmark||flcomment||qmark
  287.     if exists(flname) then do
  288.         'filenote 'flname qcomment
  289.     end
  290.     return flcomment
  291.